// 复制文件
const fs = require("fs")
const path = require('path')
const filename = path.resolve(__dirname, 'write.txt')
const tofilename = path.resolve(__dirname, 'write2.txt')

// 方式1 内存占用恐怖
async function methods1() {
    console.time('方式1')
    const file = await fs.promises.readFile(filename)
    await fs.promises.writeFile(tofilename, file)
    console.timeEnd('方式1')
    console.log('\x1B[42m%s\x1B[49m', '复制完成')
}
// methods1()


// 方式1 使用流 内存占用少 时间短
async function methods2() {
    console.time('方式2')
    const rs = fs.createReadStream(filename)
    const ws = fs.createWriteStream(tofilename)

    // rs.on('data', chunk => {
    //     const flag = ws.write(chunk)
    //     if (!flag) { // 写入通道已占满
    //         rs.pause() // 暂停读取
    //     }
    // })

    // ws.on('drain', () => {
    //     // 写入通道已清空 继续读取文件
    //     rs.resume()
    // })

    // rs.on('close', () => {
    //     // 文件读取完成
    //     ws.end()
    //     console.timeEnd('方式2')
    // })

    // 把读取流的 管道 和 写入流管道连接
    rs.pipe(ws)

    rs.on('close', () => {
        // 文件读取完成
        console.timeEnd('方式2')
    })
}

methods2()